package design.patterns.behavioral;

/**
 * 状态模式
 * 解释：
 * 状态模式是一种行为设计模式，
 * 让你能在一个对象的内部状态变化时改变其行为， 使其看上去就像改变了自身所属的类一样。
 */

/**
 * 情景
 * 开心时，唱歌
 * 伤心时，睡觉
 */
public class G_State {
    public static void main(String[] args) {
        Context context = new Context(new Happy());
        context.doSomething();

        context.setState(new Sad());
        context.doSomething();
    }
}

/**-----
 * 主要类 情绪类 Happy 、 Sad ， 输入情绪的类Context
 * 情绪类，指情绪相对应的动作，如开心时唱歌、伤心时睡觉
 * 输入情绪的类，指 输入情绪后可以反应当前的状态。
 */

/**
 * 状态接口
 * doSomething 不同状态将会做哪些事情。
 */
interface State{
    void doSomething();
}

/**
 * 开心类
 * 开心时就唱歌
 */
class Happy implements State{

    @Override
    public void doSomething() {
        System.out.println(this.getClass().getSimpleName()+" 时唱歌");
    }
}

/**
 * 伤心类
 * 伤心时就睡觉
 */
class Sad implements State{

    @Override
    public void doSomething() {
        System.out.println(this.getClass().getSimpleName()+" 时睡觉");
    }
}

/**
 * 可以输入情绪的类
 */
class Context implements State{
    private  State state;

    public Context(State state) {
        this.state = state;
    }

    @Override
    public void doSomething() {
        state.doSomething();
    }

    public void setState(State state){
        this.state =state;
    }

}

